package com.xinqi.modules.course.content.service;

import com.xinqi.common.base.response.PageInfo;
import com.xinqi.common.base.response.Param;
import com.xinqi.common.base.response.R;
import com.xinqi.common.mybatis.data.service.BaseService;
import com.xinqi.modules.course.content.domain.CourseContentEntity;
import com.xinqi.modules.course.content.dto.req.ContentMonthDayQueryDTO;
import com.xinqi.modules.course.content.dto.req.CourseContentCreateDTO;
import com.xinqi.modules.course.content.dto.req.CourseContentQueryDTO;
import com.xinqi.modules.course.content.dto.req.CourseContentUpdateDTO;
import com.xinqi.modules.course.content.dto.rsp.CourseContentResultDTO;
import com.xinqi.modules.course.content.dto.rsp.CourseRepeatContentResult;
import com.xinqi.modules.discuss.discuss.dto.rsp.CourseDiscussResultDTO;
import com.xinqi.modules.discuss.notice.dto.rsp.CourseNoticeResultDTO;
import com.xinqi.modules.exam.paper.dto.rsp.CourseExamPaperResultDTO;
import com.xinqi.modules.homework.homework.dto.rsp.CourseHomeworkResultDTO;

import java.util.List;
import java.util.Map;

/**
 * 课程内容表服务层
 *
 * @author: system
 * @date: 2023/03/08
 */
public interface CourseContentService extends BaseService<CourseContentEntity> {

    /**
     * 分页查询 课程内容表数据
     */
    PageInfo<CourseContentResultDTO> page(Param pageable, CourseContentQueryDTO query);

    /**
     * 查询 课程内容表数据
     */
    List<CourseContentResultDTO> findByContent(CourseContentQueryDTO query);

    /**
     * 查询 课程内容表数据
     */
    List<CourseContentResultDTO> find(CourseContentQueryDTO query);

    /**
     * 根据id查询 课程内容表数据
     */
    CourseContentResultDTO findById(Long id);

    /**
     * 新增 课程内容表数据
     */
    R insertOrUpdate(CourseContentCreateDTO dto);

    /**
     * 根据id修改 课程内容表数据
     */
    R updateById(CourseContentUpdateDTO dto);

    /**
     * 根据id删除 课程内容表数据
     */
    R deleteById(Long id);

    /**
     * 课程栏目移动到章节
     */
    R shiftIn(List<CourseContentUpdateDTO> list);

    /**
     * 课程栏目移出章节
     */
    R shiftOut(List<CourseContentUpdateDTO> list);

    /**
     * 课程汇总年月查询
     */
    PageInfo<Map<String, Object>> selectYearMonth(Param pageable, Long classId);

    /**
     * 课程汇总年月日查询
     */
    PageInfo<Map<String, Object>> selectYearMonthDay(Param pageable, Long classId);

    List<Map<String, Object>> selectMonthDay(ContentMonthDayQueryDTO queryParam);

    List<CourseRepeatContentResult> selectAllDay(ContentMonthDayQueryDTO queryParam);

    /**
     * 根据课程栏目ID与类型查找
     *
     * @param contentId
     * @param type
     * @return
     */
    CourseContentEntity selectByContentIdAndType(Long contentId, Integer type);

    /**
     * 删除了互动视频根据
     */
    Boolean deleteVideoById(Long contentId);

    /**
     * 获取课程内容通过章节ID
     */
    List<CourseContentEntity> getCourseContentByChapterId(Long chapterId);

    /**
     * 根据课程内容ID和类型删除内容
     */
    Boolean deleteCourseContentById(List<Long> contentIds, Integer type);

    /**
     * 根据课程内容ID和类型更新内容
     */
    Boolean updateCourseContentByType(List<CourseContentEntity> list);

    void removeCourseContentBatchByContentId(List<Long> idList);

    /**
     * 校验课程内容是否存在
     */
    boolean checkCourseContent(Integer type, Long contentId);

    /**
     * 通过ID删除测评
     *
     * @param id
     * @return
     */
    int deleteExamById(Long id);







    /**
     * 同步测评汇总主表
     *
     * @param entity
     */
 /*   void syncContentExam(CourseExamPaperResultDTO entity);*/

    /**
     * 校验课程内容是否已删除
     *
     * @param contentId 课程内容ID
     * @param type      课程内容类型
     */
    void exitCourseContent(Long contentId, Integer type);

}
